home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / arexx / ole1v10a.lha / OLE_System / help / OLE_Modules < prev    next >
Encoding:
Text File  |  1994-12-04  |  7.9 KB  |  397 lines

  1. /*
  2.  * empty.mod
  3.  *
  4.  * USAGE: empty.mod
  5.  *
  6.  * empty.mod is the skeleton of an OLE module. Containing all settings to
  7.  * build a GUI, a message port and other...
  8.  *
  9.  * HISTORY:
  10.  * v1.17    aligned with the new server design v1.10
  11.  *
  12.  * $(C): (1994, Rocco Coluccelli, Bologna)
  13.  * $VER: empty.mod 1.17 (30.Nov.1994)
  14.  */
  15.  
  16. OPTIONS RESULTS
  17.  
  18. /*
  19.  *    Read the startup clip
  20.  *    start point for gadgets, font dimension, commands ports, ...
  21.  */
  22. PARSE ARG oleclip
  23. PARSE VALUE GETCLIP(oleclip) WITH jobID modID box.left box.top char.w char.h olewin oleport olehost userscreen userport olepipe locale config modstatus .
  24.  
  25. /*
  26.  *    Configuration
  27.  */
  28. IF ~SHOW('C',config) THEN DO
  29.     /*                var1 =    
  30.      *    default        ...        
  31.      */                varN =    
  32.     END
  33.  
  34. ELSE PARSE VALUE GETCLIP(config) WITH var1',' '...' ','varN','
  35.  
  36.     /*                        par1 =
  37.      *    fixed parameters    ...
  38.      */                        parN =
  39.  
  40. /*
  41.  *    Send commands to OLE server
  42.  */
  43. ADDRESS VALUE oleport
  44.  
  45. /*
  46.  *    Open the module commands port
  47.  *    In case of fault terminate current job and exit
  48.  */
  49. IF OPENPORT(olehost) == NULL() THEN DO
  50.     ERROR jobID modID 1 olehost
  51.     SETJOB jobID 'end'
  52.     EXIT 10
  53.     END
  54.  
  55. /*
  56.  *    Wait for messages at control port until the end
  57.  */
  58. rt_TAG = 'rt_pubscrname=' || userscreen 'rtez_flags=ezreqf_centertext'
  59. elab = 1
  60. st = GUIGads()
  61. DO UNTIL st = 'end'
  62.  
  63.     CALL WAITPKT(olehost)
  64.     pkt = GETPKT(olehost)
  65.  
  66.     IF pkt == NULL() THEN ITERATE
  67.  
  68.     /*
  69.      *    Extract and execute each command.
  70.      *    (cmd) command ID
  71.      *    (argv) general argument strig, may be empty
  72.      *    (n0) the number of gadget to update
  73.      *    (nn) gadget to activate
  74.      */
  75.     PARSE VALUE GETARG(pkt) WITH cmd argv
  76.     PARSE VALUE GETARG(pkt,1) WITH n0 nn .
  77.  
  78.     SELECT
  79.  
  80.         WHEN cmd = 'UNICONIFY' THEN DO
  81.             cmd jobID modID
  82.             CALL Gadgets(8,1,g_gads)
  83.         END
  84.  
  85.         /*
  86.          *    TODO: fix this section
  87.          */
  88.         WHEN cmd = 'HELP' THEN DO
  89.             NOP
  90.             /*
  91.             REQASK modID 'þHELP' || st
  92.             */
  93.         END
  94.  
  95.         WHEN cmd = 'START' | cmd = 'QUIT' THEN DO
  96.             st = 'end'
  97.             elab = ~(cmd = 'QUIT')
  98.         END
  99.  
  100.         OTHERWISE NOP
  101.  
  102.     END    /* end select commands */
  103.  
  104.     IF n0 ~= '' THEN DO
  105.         CALL Gadgets(2,n0)
  106.         IF nn ~= '' THEN CALL ActivateGadget(olewin,GAD.nn)
  107.         CALL SETCLIP(config,var1','...','varN',')
  108.         END
  109.  
  110.     CALL REPLY(pkt,0)
  111.  
  112. END    /* end do until */
  113.  
  114. CALL CLOSEPORT(olehost)
  115.  
  116. /*
  117.  *    Quit command from the server, abort operations
  118.  */
  119. IF ~elab THEN EXIT 0
  120.  
  121. /*
  122.  *    Remove all gadgets and let the server launch the next module
  123.  */
  124. ADDRESS VALUE oleport
  125. SETJOB jobID 'end'
  126.  
  127.  
  128. ADDRESS VALUE userport
  129.  
  130.     /***********************\
  131.     *                        *
  132.     *    DATA  ELABORATION    *
  133.     *                        *
  134.     \***********************/
  135.  
  136. ADDRESS VALUE oleport
  137. SETJOB jobID modID + 1
  138.  
  139. EXIT 0
  140.  
  141.  
  142. /*
  143.  *    Send commands to host program
  144.  */
  145. HostCmd:
  146. PARSE ARG cmd
  147.  
  148.     ADDRESS VALUE userport
  149.     cmd
  150.     ADDRESS
  151.  
  152. RETURN result
  153.  
  154.  
  155. GetLocale: PROCEDURE EXPOSE locale
  156. ARG strID
  157.  
  158.     strID = 'þ'strID'þ'; PARSE VALUE GETCLIP(locale) WITH (strID)text'Þ'
  159.  
  160. RETURN text
  161.  
  162.  
  163. /*
  164.  *    Update the progress indicator
  165.  */
  166. Complete:
  167.  
  168.     ADDRESS VALUE oleport
  169.     COMPLETE jobID modID ARG(1)
  170.     ADDRESS
  171.  
  172. RETURN
  173.  
  174.  
  175. /*
  176.  *    g_str.    = string
  177.  *    g_xpos.    = x position
  178.  *    g_ypos.    = y position
  179.  *    g_type.    = gadget type    (1=text 2=button 3=string 4=boolean)
  180.  *    g_len.    = length
  181.  *    g_msg.    = command
  182.  */
  183. GUIGads:
  184.  
  185.     /*
  186.      *    offsets for the correct position
  187.      */
  188.     g_offx. = 2;    g_offx.1 = 0;            g_offx.3 = 2
  189.     g_offy. = 2;    g_offy.1 = char.h + 1;    g_offy.3 = 3
  190.     /*
  191.      *    values to fix gadget dimensions
  192.      */
  193.     g_wid. = 8;                g_wid.1 = 0;            g_wid.3 = 12
  194.     g_hei. = char.h + 4;    g_hei.1 = char.h + 1;    g_hei.3 = char.h + 6
  195.     /*
  196.      *    space between gadgets and lines
  197.      */
  198.     g_sx = char.w % 2;    g_sy = char.h % 4
  199.     /*
  200.      *    gadget already drawn
  201.      */
  202.     g_onoff. = 0
  203.  
  204.     box.left = box.left + g_sx; box.top = box.top + 2 * g_sy
  205.     box.w = 36 * char.w
  206.  
  207.     n = 1
  208.  
  209.     /*
  210.      *    Set ID number for each page of gadgets
  211.      */
  212.     nmain = 1; nborder = 2; nlocale = 3; npaths = 4; nbases = 5
  213.  
  214.     n1.nmain = n
  215.     x = box.left; y = box.top
  216.     CALL IniGad(2,2,0,'SETUP' nborder,CENTER('Window borders',30))
  217.     y = y + g_hei.3 + 2 * g_sy
  218.     CALL IniGad(2,2,0,'SETUP' nlocale,CENTER('Update catalogs',30))
  219.     y = y + g_hei.3 + 2 * g_sy
  220.     CALL IniGad(2,2,0,'SETUP' nbases,CENTER('Object names',30))
  221.     y = y + g_hei.3 + 2 * g_sy
  222.     CALL IniGad(2,2,0,'SETUP' npaths,CENTER('Setup paths',30))
  223.     box.h = y
  224.     n2.nmain = n - 1
  225.  
  226.     n1.nborder = n
  227.     y = box.top
  228.     CALL IniGad(3,2,0,'BORDER' bt '%1' n '%2%g',win.bt,3)
  229.     CALL IniGad(1,0,1,,'Top')
  230.     y = y + g_hei.3 + 4 * g_sy
  231.     CALL IniGad(1,2,0,,'Gadgets area')
  232.     y = y + g_hei.3 + 4 * g_sy
  233.     CALL IniGad(1,1,0,,' Left')
  234.     CALL IniGad(3,0,1,'BORDER' bl '%1' n '%2%g',win.bl,3)
  235.     n1 = IniGad(3,0,0,'BORDER' br '%1' n '%2%g',win.br,3)
  236.     n2 = IniGad(1,0,1,,'Right')
  237.     x = box.left + box.w - x; g_xpos.n1 = g_xpos.n1 + x; g_xpos.n2 = g_xpos.n2 + x
  238.     y = y + g_hei.3 + 4 * g_sy
  239.     CALL IniGad(3,2,0,'BORDER' bb '%1' n '%2%g',win.bb,3)
  240.     CALL IniGad(1,0,1,,'Bottom')
  241.     box.h = MAX(box.h,y)
  242.     n2.nborder = n - 1
  243.  
  244.     n1.nlocale = n
  245.     y = box.top
  246.     CALL IniFileGad('REQFILE ED',olefile.ed,'Choose an ASCII editor')
  247.     y = y + g_hei.3 + 2 * g_sy
  248.     CALL IniFileGad('REQFILE CT',olefile.ct,'Choose a source catalog')
  249.     y = y + g_hei.3 + 2 * g_sy
  250.     CALL IniGad(2,1,0,'CATALOG EDIT','Edit')
  251.     CALL IniGad(2,0,1,'CATALOG MAKE','Compile')
  252.     box.h = MAX(box.h,y)
  253.     n2.nlocale = n - 1
  254.  
  255.     n1.npaths = n
  256.     y = box.top
  257.     CALL IniGad(1,2,0,,'Under construction')
  258.     box.h = MAX(box.h,y)
  259.     n2.npaths = n - 1
  260.  
  261.     n1.nbases = n
  262.     y = box.top
  263.     CALL IniGad(1,2,0,,'Under construction')
  264.     box.h = MAX(box.h,y)
  265.     n2.nbases = n - 1
  266.  
  267.     y = box.h + g_hei.3 + 2 * g_sy
  268.     CALL IniGad(2,1,0,'OKAY','Okay')
  269.     g_gads = IniGad(2,3,0,'HELP','Help')
  270.  
  271.     box.h = y + g_hei.2 + 2 * g_sy - box.top
  272.  
  273.     WINDOW jobID modID (box.w + 2 * g_sx) (box.h + 2 * g_sy) 1 1
  274.     CALL Gadgets(4,g_gads - 1,g_gads)
  275.     CALL Gadgets(4,n1.nmain,n2.nmain)
  276.  
  277. RETURN nmain
  278.  
  279.  
  280. /*
  281.  *    Gadgets(mode,gad1,...)
  282.  *    (mode) 1 draw new gadgets        random mode (gad1,gad3,gad6,gad2)
  283.  *    (mode) 2 update old gadgets            "
  284.  *    (mode) 3 remove gadgets                "
  285.  *    (mode) 4 draw new gadgets        range mode (gad1 TO gad5)
  286.  *    (mode) 5 update old gadgets            "
  287.  *    (mode) 6 remove gadgets                "
  288.  *    (mode) 7 quick remove gadgets        "
  289.  */
  290. Gadgets:
  291.  
  292.     IF ARG(1) < 4 THEN
  293.         DO i = 2 TO ARG(); n = ARG(i)
  294.             IF ARG(1) ~= 1 THEN CALL DelGad(n,g_type.n)
  295.             IF ARG(1) ~= 3 THEN CALL NewGad(n,g_type.n)
  296.         END
  297.  
  298.     ELSE IF ARG(1) < 7 THEN
  299.         DO n = ARG(2) TO ARG(3)
  300.             IF ARG(1) ~= 4 THEN CALL DelGad(n,g_type.n)
  301.             IF ARG(1) ~= 6 THEN CALL NewGad(n,g_type.n)
  302.         END
  303.  
  304.     ELSE IF ARG(1) = 8 THEN
  305.         DO n = ARG(2) TO ARG(3)
  306.             IF g_onoff.n THEN CALL NewGad(n,g_type.n)
  307.         END
  308.  
  309.     ELSE DO
  310.         DO n = ARG(2) TO ARG(3)
  311.             g_onoff.n = 0
  312.             IF g_type.n ~= 1 THEN CALL RemoveGadget(olewin,GAD.n)
  313.         END
  314.         CALL SetAPen(olewin,0)
  315.         CALL RectFill(olewin,box.left,box.top,box.left + box.w,box.top + box.h)
  316.         CALL RefreshGadgets(olewin)
  317.         END
  318. RETURN
  319.  
  320.  
  321. DelGad:
  322. PARSE ARG n,t
  323.  
  324.     g_onoff.n = 0
  325.  
  326.     IF t ~= 1 THEN CALL RemoveGadget(olewin,GAD.n)
  327.  
  328.     x = g_xpos.n - g_offx.t; y = g_ypos.n - g_offy.t
  329.     CALL SetAPen(olewin,0)
  330.     CALL RectFill(olewin,x,y,x + g_len.n,y + g_hei.t)
  331.  
  332. RETURN
  333.  
  334.  
  335. NewGad:
  336. PARSE ARG n,t
  337.  
  338.     g_onoff.n = 1
  339.  
  340.     IF t = 2 THEN
  341.         CALL AddGadGet(olewin,g_xpos.n,g_ypos.n,GAD.n,g_str.n,g_msg.n)
  342.  
  343.     ELSE IF t = 3 THEN
  344.         CALL AddGadGet(olewin,g_xpos.n,g_ypos.n,GAD.n,g_str.n,g_msg.n,g_len.n - 4,"RIDGEBORDER")
  345.  
  346.     ELSE IF t = 4 THEN
  347.         CALL AddGadGet(olewin,g_xpos.n,g_ypos.n,GAD.n,D2C(32 + g_str.n * 183),g_msg.n)
  348.  
  349.     ELSE DO
  350.         CALL SetAPen(olewin,1)
  351.         CALL Move(olewin,g_xpos.n,g_ypos.n)
  352.         CALL Text(olewin,g_str.n)
  353.         END
  354. RETURN
  355.  
  356.  
  357. /*
  358.  * n = IniGad(t,na,nx,msg,str,...)
  359.  * gadget of (t) type
  360.  * (na) = 0,1,2,3 closer,left,center or right
  361.  * (nx) = 0,1,... blanks
  362.  * (msg) command
  363.  * (str) text of gadget
  364.  */
  365. IniGad:
  366. PARSE ARG t,na,nx,g_msg.n,g_str.n,var
  367.  
  368.     x = x + nx * g_sx
  369.  
  370.     IF t = 3 & var > 0 THEN
  371.         g_len.n = var * char.w + g_wid.t
  372.     ELSE IF t = 3 THEN
  373.         g_len.n = box.left + box.w - x
  374.     ELSE
  375.         g_len.n = LENGTH(g_str.n) * char.w + g_wid.t
  376.  
  377.     IF na > 0 THEN x = box.left + (na - 1) * (box.w - g_len.n) % 2 + nx * g_sx
  378.  
  379.     g_xpos.n = x + g_offx.t; g_ypos.n = y + g_offy.t; g_type.n = t
  380.     x = x + g_len.n
  381.     n = n + 1
  382.  
  383.     IF t = 4 THEN CALL IniGad(1,0,1,,var)
  384.  
  385. RETURN n - 1
  386.  
  387.  
  388. IniFileGad:
  389. PARSE ARG msg,str,txt
  390.  
  391.     CALL IniGad(1,1,0,,txt)
  392.     y = y + g_hei.1 + 2 * g_sy
  393.     CALL IniGad(2,1,0,msg '%1' (n + 1),'F')
  394.     CALL IniGad(3,0,1,msg '%1' n '%2%g',str)
  395.  
  396. RETURN n - 1
  397.